#include <sys_head.h>

typedef struct data
{
    int len;//实际的数据长度，不超过128
    char buf[128];//存放数据的缓冲区
}DATA;

void write_fifo(int fifoFd)
{
    //打开文件并读取
    int fd = open("1.abc",O_RDONLY);
    if (-1 == fd)
    {
        perror("open");
        close(fd);
        exit(0);
    }
    DATA data;
    //data.len是实际读取的字节数
    //读取文件内容并写入到管道文件
    while (data.len = read(fd,data.buf,sizeof(data.buf)))
    {
        if (data.len == -1 || data.len == 0)
        {
            printf("读取文件出错或者文件是空的\n");
            break;
        }
        write(fifoFd,&data,sizeof(data));//把整个结构体全部放到管道里面
        printf("发送了%d个字节出去\n",data.len);
        //实际读取的字节数没有缓冲区那么大，说明是最后一次读取了
        if (data.len < sizeof(data.buf))
        {
            printf("文件读取完毕\n");
            break;
        }
        sleep(1);
    }
    
    close(fd);
}

int main(int argc, char const *argv[])
{
    //创建一个名为testFifo的有名管道，并返回管道的文件是否创建成功
    // int ret = mkfifo("/home/student/桌面/testFifo",0666);
    // if (ret == -1)
    // {
    //     perror("mkfifo");
    // }
    //打开有名管道并写入
    int fd = open("/home/student/桌面/testFifo",O_WRONLY);
    write_fifo(fd);
    close(fd);
    return 0;
}
